{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Chapter 6 – Decision Trees**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_This notebook contains all the sample code and solutions to the exercises in chapter 6._"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<table align=\"left\">\n",
    "  <td>\n",
    "    <a target=\"_blank\" href=\"https://colab.research.google.com/github/ageron/handson-ml2/blob/master/06_decision_trees.ipynb\"><img src=\"https://www.tensorflow.org/images/colab_logo_32px.png\" />Run in Google Colab</a>\n",
    "  </td>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Setup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, let's import a few common modules, ensure MatplotLib plots figures inline and prepare a function to save the figures. We also check that Python 3.5 or later is installed (although Python 2.x may work, it is deprecated so we strongly recommend you use Python 3 instead), as well as Scikit-Learn ≥0.20."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Python ≥3.5 is required\n",
    "import sys\n",
    "assert sys.version_info >= (3, 5)\n",
    "\n",
    "# Scikit-Learn ≥0.20 is required\n",
    "import sklearn\n",
    "assert sklearn.__version__ >= \"0.20\"\n",
    "\n",
    "# Common imports\n",
    "import numpy as np\n",
    "import os\n",
    "\n",
    "# to make this notebook's output stable across runs\n",
    "np.random.seed(42)\n",
    "\n",
    "# To plot pretty figures\n",
    "%matplotlib inline\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "mpl.rc('axes', labelsize=14)\n",
    "mpl.rc('xtick', labelsize=12)\n",
    "mpl.rc('ytick', labelsize=12)\n",
    "\n",
    "# Where to save the figures\n",
    "PROJECT_ROOT_DIR = \".\"\n",
    "CHAPTER_ID = \"decision_trees\"\n",
    "IMAGES_PATH = os.path.join(PROJECT_ROOT_DIR, \"images\", CHAPTER_ID)\n",
    "os.makedirs(IMAGES_PATH, exist_ok=True)\n",
    "\n",
    "def save_fig(fig_id, tight_layout=True, fig_extension=\"png\", resolution=300):\n",
    "    path = os.path.join(IMAGES_PATH, fig_id + \".\" + fig_extension)\n",
    "    print(\"Saving figure\", fig_id)\n",
    "    if tight_layout:\n",
    "        plt.tight_layout()\n",
    "    plt.savefig(path, format=fig_extension, dpi=resolution)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Training and visualizing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
       "            splitter='best')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "\n",
    "iris = load_iris()\n",
    "X = iris.data[:, 2:] # petal length and width\n",
    "y = iris.target\n",
    "\n",
    "tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)\n",
    "tree_clf.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"360pt\" height=\"314pt\"\n",
       " viewBox=\"0.00 0.00 360.00 314.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 310)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-310 356,-310 356,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<path fill=\"transparent\" stroke=\"#000000\" d=\"M215,-306C215,-306 67,-306 67,-306 61,-306 55,-300 55,-294 55,-294 55,-235 55,-235 55,-229 61,-223 67,-223 67,-223 215,-223 215,-223 221,-223 227,-229 227,-235 227,-235 227,-294 227,-294 227,-300 221,-306 215,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">petal length (cm) &lt;= 2.45</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.667</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 150</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [50, 50, 50]</text>\n",
       "<text text-anchor=\"middle\" x=\"141\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = setosa</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<path fill=\"#e58139\" stroke=\"#000000\" d=\"M108,-179.5C108,-179.5 12,-179.5 12,-179.5 6,-179.5 0,-173.5 0,-167.5 0,-167.5 0,-123.5 0,-123.5 0,-117.5 6,-111.5 12,-111.5 12,-111.5 108,-111.5 108,-111.5 114,-111.5 120,-117.5 120,-123.5 120,-123.5 120,-167.5 120,-167.5 120,-173.5 114,-179.5 108,-179.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"60\" y=\"-164.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.0</text>\n",
       "<text text-anchor=\"middle\" x=\"60\" y=\"-149.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 50</text>\n",
       "<text text-anchor=\"middle\" x=\"60\" y=\"-134.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [50, 0, 0]</text>\n",
       "<text text-anchor=\"middle\" x=\"60\" y=\"-119.3\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = setosa</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M112.6701,-222.8796C105.0357,-211.6636 96.7652,-199.5131 89.0901,-188.2372\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"91.8775,-186.1122 83.3572,-179.8149 86.0908,-190.0511 91.8775,-186.1122\"/>\n",
       "<text text-anchor=\"middle\" x=\"78.6907\" y=\"-200.6755\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<path fill=\"transparent\" stroke=\"#000000\" d=\"M293.5,-187C293.5,-187 150.5,-187 150.5,-187 144.5,-187 138.5,-181 138.5,-175 138.5,-175 138.5,-116 138.5,-116 138.5,-110 144.5,-104 150.5,-104 150.5,-104 293.5,-104 293.5,-104 299.5,-104 305.5,-110 305.5,-116 305.5,-116 305.5,-175 305.5,-175 305.5,-181 299.5,-187 293.5,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"222\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">petal width (cm) &lt;= 1.75</text>\n",
       "<text text-anchor=\"middle\" x=\"222\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"222\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 100</text>\n",
       "<text text-anchor=\"middle\" x=\"222\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 50, 50]</text>\n",
       "<text text-anchor=\"middle\" x=\"222\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = versicolor</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;2 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>0&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M169.3299,-222.8796C175.2763,-214.1434 181.6086,-204.8404 187.745,-195.8253\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"190.8156,-197.5342 193.5492,-187.2981 185.0289,-193.5953 190.8156,-197.5342\"/>\n",
       "<text text-anchor=\"middle\" x=\"198.2157\" y=\"-208.1587\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>3</title>\n",
       "<path fill=\"#39e581\" fill-opacity=\"0.898039\" stroke=\"#000000\" d=\"M202,-68C202,-68 102,-68 102,-68 96,-68 90,-62 90,-56 90,-56 90,-12 90,-12 90,-6 96,0 102,0 102,0 202,0 202,0 208,0 214,-6 214,-12 214,-12 214,-56 214,-56 214,-62 208,-68 202,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"152\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.168</text>\n",
       "<text text-anchor=\"middle\" x=\"152\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 54</text>\n",
       "<text text-anchor=\"middle\" x=\"152\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 49, 5]</text>\n",
       "<text text-anchor=\"middle\" x=\"152\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = versicolor</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;3 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>2&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M195.9346,-103.9815C190.3955,-95.1585 184.5364,-85.8258 178.9645,-76.9506\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"181.7922,-74.872 173.5108,-68.2637 175.8637,-78.594 181.7922,-74.872\"/>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4</title>\n",
       "<path fill=\"#8139e5\" fill-opacity=\"0.976471\" stroke=\"#000000\" d=\"M340,-68C340,-68 244,-68 244,-68 238,-68 232,-62 232,-56 232,-56 232,-12 232,-12 232,-6 238,0 244,0 244,0 340,0 340,0 346,0 352,-6 352,-12 352,-12 352,-56 352,-56 352,-62 346,-68 340,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"292\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">gini = 0.043</text>\n",
       "<text text-anchor=\"middle\" x=\"292\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46</text>\n",
       "<text text-anchor=\"middle\" x=\"292\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = [0, 1, 45]</text>\n",
       "<text text-anchor=\"middle\" x=\"292\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">class = virginica</text>\n",
       "</g>\n",
       "<!-- 2&#45;&gt;4 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>2&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M248.0654,-103.9815C253.6045,-95.1585 259.4636,-85.8258 265.0355,-76.9506\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"268.1363,-78.594 270.4892,-68.2637 262.2078,-74.872 268.1363,-78.594\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.files.Source at 0x7f99f82fc710>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from graphviz import Source\n",
    "from sklearn.tree import export_graphviz\n",
    "\n",
    "export_graphviz(\n",
    "        tree_clf,\n",
    "        out_file=os.path.join(IMAGES_PATH, \"iris_tree.dot\"),\n",
    "        feature_names=iris.feature_names[2:],\n",
    "        class_names=iris.target_names,\n",
    "        rounded=True,\n",
    "        filled=True\n",
    "    )\n",
    "\n",
    "Source.from_file(os.path.join(IMAGES_PATH, \"iris_tree.dot\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure decision_tree_decision_boundaries_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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2/vyD2Axkaqp+VX2PwXcme6gJHdde+0tXHddJOc1M7baqjldu3bk8MMPYsiQc2nTpnXa7zlr1rc8/vizXHLJILbeeqvK/Q899ATnnnspy5d/Q7NmTdN6T3fnxhvv4N57H2bp0v+x5569ue2269ltt15pvY+kR7pLz9O9qnnQccTy2WfT03cxkSyQbIJzKHCou/9o1f/J8y3QIe1RSU7baqvmTJ78GADLl69gxoxPuffesdx//yNMnvwYffr0Tuv9Zs2azXXX3cpZZ51cLcHJpJtuupPrr7+Nm2++iu7du/KPf9xHv34n8cknb2QkiUuXdM6bkm0SPRvk73Ony/PPfxh2CCJplWyC04RI1VRNrYC16QtH8kHDhkXsvfcvXd39+/+K888/i4MP/g0DB57PF1+8TVFR7s4NuXbtWm666S6uuOIifv/73wKwzz4ldO68J3ff/QAjRlwRcoTxpXselmySyrPlw3Onyy676PWU5JdkVxN/Ezi7ymc3syJgKPBquoOS/LP11ltx441/5dtv5/Lyy/8FIonC0KEj2GGHPjRpsgO7734okydX/+3UufOeXH75tVx//SjatduV5s27cPrpF7J8+QoA3njjXY455kwAunTpS1FRWzp3rj5d7Jw58+nX72S23LIzPXvuz/jxL9TrWd5990NWrFjJiScOqNzXtOkWHHVUP1588bV6XVtERNIj2QTnz8AgM3sZaERkYPHnRBbcHJboRJEKv/rVfjRs2JD334+86z/xxEGMHfsEV1xxMRMmjKWkZDeOPfYsPvros2rnjRv3HK+++hb33XcLt9wynMmTX2XQoD8CsMceu/D3v18DwNNPj+GddybxzDMPVDv/9NMv5Oij+/HMMw/QtWtnTj31AhYs+GXOj40bN7Jhw4aEW3l5eWX7r776hqKiInbcsXO1++y00458+eU36fvCRAJ0223Due224WGHIZI2ya4m/rmZ7QpcAJQBjYkMML7b3RdlMD7JI40aNaJly20oLf2BV199i8mTX+G1157hoIP2BaBfv4P5+utvueGG23nyyV/mj1yzZi0TJz5SOVC4adMtOOusi/jii1nstFM3unXrAsDuu+9Cx47bb3LfSy4ZzG9/OxCAPn12pW3bXZk06WXOP/8sAEaMGFU5MDqeHXZoz+zZkcEaP/74E82aNd3kNdvWW2/F6tVrWLduHZtv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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "\n",
    "def plot_decision_boundary(clf, X, y, axes=[0, 7.5, 0, 3], iris=True, legend=False, plot_training=True):\n",
    "    x1s = np.linspace(axes[0], axes[1], 100)\n",
    "    x2s = np.linspace(axes[2], axes[3], 100)\n",
    "    x1, x2 = np.meshgrid(x1s, x2s)\n",
    "    X_new = np.c_[x1.ravel(), x2.ravel()]\n",
    "    y_pred = clf.predict(X_new).reshape(x1.shape)\n",
    "    custom_cmap = ListedColormap(['#fafab0','#9898ff','#a0faa0'])\n",
    "    plt.contourf(x1, x2, y_pred, alpha=0.3, cmap=custom_cmap)\n",
    "    if not iris:\n",
    "        custom_cmap2 = ListedColormap(['#7d7d58','#4c4c7f','#507d50'])\n",
    "        plt.contour(x1, x2, y_pred, cmap=custom_cmap2, alpha=0.8)\n",
    "    if plot_training:\n",
    "        plt.plot(X[:, 0][y==0], X[:, 1][y==0], \"yo\", label=\"Iris setosa\")\n",
    "        plt.plot(X[:, 0][y==1], X[:, 1][y==1], \"bs\", label=\"Iris versicolor\")\n",
    "        plt.plot(X[:, 0][y==2], X[:, 1][y==2], \"g^\", label=\"Iris virginica\")\n",
    "        plt.axis(axes)\n",
    "    if iris:\n",
    "        plt.xlabel(\"Petal length\", fontsize=14)\n",
    "        plt.ylabel(\"Petal width\", fontsize=14)\n",
    "    else:\n",
    "        plt.xlabel(r\"$x_1$\", fontsize=18)\n",
    "        plt.ylabel(r\"$x_2$\", fontsize=18, rotation=0)\n",
    "    if legend:\n",
    "        plt.legend(loc=\"lower right\", fontsize=14)\n",
    "\n",
    "plt.figure(figsize=(8, 4))\n",
    "plot_decision_boundary(tree_clf, X, y)\n",
    "plt.plot([2.45, 2.45], [0, 3], \"k-\", linewidth=2)\n",
    "plt.plot([2.45, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
    "plt.plot([4.95, 4.95], [0, 1.75], \"k:\", linewidth=2)\n",
    "plt.plot([4.85, 4.85], [1.75, 3], \"k:\", linewidth=2)\n",
    "plt.text(1.40, 1.0, \"Depth=0\", fontsize=15)\n",
    "plt.text(3.2, 1.80, \"Depth=1\", fontsize=13)\n",
    "plt.text(4.05, 0.5, \"(Depth=2)\", fontsize=11)\n",
    "\n",
    "save_fig(\"decision_tree_decision_boundaries_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Predicting classes and class probabilities"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.        , 0.90740741, 0.09259259]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree_clf.predict_proba([[5, 1.5]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1])"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree_clf.predict([[5, 1.5]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Sensitivity to training set details"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4.8, 1.8]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X[(X[:, 1]==X[:, 1][y==1].max()) & (y==1)] # widest Iris versicolor flower"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=40,\n",
       "            splitter='best')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "not_widest_versicolor = (X[:, 1]!=1.8) | (y==2)\n",
    "X_tweaked = X[not_widest_versicolor]\n",
    "y_tweaked = y[not_widest_versicolor]\n",
    "\n",
    "tree_clf_tweaked = DecisionTreeClassifier(max_depth=2, random_state=40)\n",
    "tree_clf_tweaked.fit(X_tweaked, y_tweaked)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure decision_tree_instability_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 4))\n",
    "plot_decision_boundary(tree_clf_tweaked, X_tweaked, y_tweaked, legend=False)\n",
    "plt.plot([0, 7.5], [0.8, 0.8], \"k-\", linewidth=2)\n",
    "plt.plot([0, 7.5], [1.75, 1.75], \"k--\", linewidth=2)\n",
    "plt.text(1.0, 0.9, \"Depth=0\", fontsize=15)\n",
    "plt.text(1.0, 1.80, \"Depth=1\", fontsize=13)\n",
    "\n",
    "save_fig(\"decision_tree_instability_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure min_samples_leaf_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import make_moons\n",
    "Xm, ym = make_moons(n_samples=100, noise=0.25, random_state=53)\n",
    "\n",
    "deep_tree_clf1 = DecisionTreeClassifier(random_state=42)\n",
    "deep_tree_clf2 = DecisionTreeClassifier(min_samples_leaf=4, random_state=42)\n",
    "deep_tree_clf1.fit(Xm, ym)\n",
    "deep_tree_clf2.fit(Xm, ym)\n",
    "\n",
    "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n",
    "plt.sca(axes[0])\n",
    "plot_decision_boundary(deep_tree_clf1, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n",
    "plt.title(\"No restrictions\", fontsize=16)\n",
    "plt.sca(axes[1])\n",
    "plot_decision_boundary(deep_tree_clf2, Xm, ym, axes=[-1.5, 2.4, -1, 1.5], iris=False)\n",
    "plt.title(\"min_samples_leaf = {}\".format(deep_tree_clf2.min_samples_leaf), fontsize=14)\n",
    "plt.ylabel(\"\")\n",
    "\n",
    "save_fig(\"min_samples_leaf_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "angle = np.pi / 180 * 20\n",
    "rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
    "Xr = X.dot(rotation_matrix)\n",
    "\n",
    "tree_clf_r = DecisionTreeClassifier(random_state=42)\n",
    "tree_clf_r.fit(Xr, y)\n",
    "\n",
    "plt.figure(figsize=(8, 3))\n",
    "plot_decision_boundary(tree_clf_r, Xr, y, axes=[0.5, 7.5, -1.0, 1], iris=False)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure sensitivity_to_rotation_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(6)\n",
    "Xs = np.random.rand(100, 2) - 0.5\n",
    "ys = (Xs[:, 0] > 0).astype(np.float32) * 2\n",
    "\n",
    "angle = np.pi / 4\n",
    "rotation_matrix = np.array([[np.cos(angle), -np.sin(angle)], [np.sin(angle), np.cos(angle)]])\n",
    "Xsr = Xs.dot(rotation_matrix)\n",
    "\n",
    "tree_clf_s = DecisionTreeClassifier(random_state=42)\n",
    "tree_clf_s.fit(Xs, ys)\n",
    "tree_clf_sr = DecisionTreeClassifier(random_state=42)\n",
    "tree_clf_sr.fit(Xsr, ys)\n",
    "\n",
    "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n",
    "plt.sca(axes[0])\n",
    "plot_decision_boundary(tree_clf_s, Xs, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
    "plt.sca(axes[1])\n",
    "plot_decision_boundary(tree_clf_sr, Xsr, ys, axes=[-0.7, 0.7, -0.7, 0.7], iris=False)\n",
    "plt.ylabel(\"\")\n",
    "\n",
    "save_fig(\"sensitivity_to_rotation_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Regression trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Quadratic training set + noise\n",
    "np.random.seed(42)\n",
    "m = 200\n",
    "X = np.random.rand(m, 1)\n",
    "y = 4 * (X - 0.5) ** 2\n",
    "y = y + np.random.randn(m, 1) / 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeRegressor(criterion='mse', max_depth=2, max_features=None,\n",
       "           max_leaf_nodes=None, min_impurity_decrease=0.0,\n",
       "           min_impurity_split=None, min_samples_leaf=1,\n",
       "           min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
       "           presort=False, random_state=42, splitter='best')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeRegressor\n",
    "\n",
    "tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)\n",
    "tree_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure tree_regression_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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vbCwkPvuu49//etfvPrqq4DhaP7617/m2GOPJScnh9NPP52XX365xXHFxcXcdtttzJgxg169epGfn8/48ePZu3cvAJWVlYwaNQqA/v37o5SiuLi4xTk+//xzRowYQV5eHoMGDWLZsmVpvZeqqir27dvHv//7v4fW5eXlMWrUKFasWJHWuYXM8+677/Luu+86bUZcEt3Tlk5f72H2798fc1vUa5iTY+jn3r2m9DNeO17A6/YL7sEL+tkuq4n9wK/vjF7FwrX6mU5+hpuXdHLozPDpfS+EctjsyJeLBglykLt16xZ12+HDh3V2draeNhCAus0AACAASURBVG2a1lrryy67TPfo0UP/6U9/0itXrtTXXnut9vl8LXJ5+/Xrp4uKivR5552nX3jhBT1v3jzduXNn/aMf/UhrrfXevXv1/fffrwG9bNkyXV1drd99912tdXMO8imnnKIffvhhvXLlSj1y5Ejdrl07vXXr1lAbfr9fNzQ0xF0aGxtD+z/22GPa5/O1WKe11vfdd5/u2LGj+Qsq2Eq8/tvWwWM5yEOGDDG1/0cPv5aSfpptJx5O9D8r7RfaNp7Qz86d9RDQevduW5tNVz8lxSJNPvi4OTUh3gwxbiQnJ4fu3bvzzTffsGrVKl566SUqKys5//zzAbjooouoqanhnnvu4bnnngsdd+jQIV566SXy8/MBI1p71VVX8emnn3LSSSdx4oknAnDmmWceFT0GuPnmm7nmmmsA4/FQz549Wb58OZMmTQLg7rvv5q677opre79+/di8eTMAtbW15OfnH5Um0qVLFw4ePMiRI0do3769+QskCIIpzD7mffej5morZvTTzY+Tk8Hr9guCKfx+I4XKY6mckmKRJqec3vyBuyHf2CzGjyx47bXX6NWrF9/97ndpbGwMLRdeeCFr165tccyIESNCzjHA5Zdfjtaad955J6k2L7rootD/3bp145hjjuHLL78MrSsvL+edd96Ju7z44ostzhltKurge5NpqgXBHm699VZT+59+VrODbEY/zbbjNrxuvyCYwu/nVvCcgywR5DgkU4tz8KnNH7hV+cZ21QA9fPgwu3btomfPnnz11Vds376ddu3aHbVfZGT2mGOOafE6NzeX/Px8vv7666TaLSwsbPG6ffv2HA4bxd6rV6+j2ogk3Ont0qUL+/fvx+/3t7B1z549dOzYMep7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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeRegressor\n",
    "\n",
    "tree_reg1 = DecisionTreeRegressor(random_state=42, max_depth=2)\n",
    "tree_reg2 = DecisionTreeRegressor(random_state=42, max_depth=3)\n",
    "tree_reg1.fit(X, y)\n",
    "tree_reg2.fit(X, y)\n",
    "\n",
    "def plot_regression_predictions(tree_reg, X, y, axes=[0, 1, -0.2, 1], ylabel=\"$y$\"):\n",
    "    x1 = np.linspace(axes[0], axes[1], 500).reshape(-1, 1)\n",
    "    y_pred = tree_reg.predict(x1)\n",
    "    plt.axis(axes)\n",
    "    plt.xlabel(\"$x_1$\", fontsize=18)\n",
    "    if ylabel:\n",
    "        plt.ylabel(ylabel, fontsize=18, rotation=0)\n",
    "    plt.plot(X, y, \"b.\")\n",
    "    plt.plot(x1, y_pred, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
    "\n",
    "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n",
    "plt.sca(axes[0])\n",
    "plot_regression_predictions(tree_reg1, X, y)\n",
    "for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
    "    plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
    "plt.text(0.21, 0.65, \"Depth=0\", fontsize=15)\n",
    "plt.text(0.01, 0.2, \"Depth=1\", fontsize=13)\n",
    "plt.text(0.65, 0.8, \"Depth=1\", fontsize=13)\n",
    "plt.legend(loc=\"upper center\", fontsize=18)\n",
    "plt.title(\"max_depth=2\", fontsize=14)\n",
    "\n",
    "plt.sca(axes[1])\n",
    "plot_regression_predictions(tree_reg2, X, y, ylabel=None)\n",
    "for split, style in ((0.1973, \"k-\"), (0.0917, \"k--\"), (0.7718, \"k--\")):\n",
    "    plt.plot([split, split], [-0.2, 1], style, linewidth=2)\n",
    "for split in (0.0458, 0.1298, 0.2873, 0.9040):\n",
    "    plt.plot([split, split], [-0.2, 1], \"k:\", linewidth=1)\n",
    "plt.text(0.3, 0.5, \"Depth=2\", fontsize=13)\n",
    "plt.title(\"max_depth=3\", fontsize=14)\n",
    "\n",
    "save_fig(\"tree_regression_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "export_graphviz(\n",
    "        tree_reg1,\n",
    "        out_file=os.path.join(IMAGES_PATH, \"regression_tree.dot\"),\n",
    "        feature_names=[\"x1\"],\n",
    "        rounded=True,\n",
    "        filled=True\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"474pt\" height=\"269pt\"\n",
       " viewBox=\"0.00 0.00 474.00 269.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 265)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-265 470,-265 470,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.325490\" stroke=\"#000000\" d=\"M272.5,-261C272.5,-261 188.5,-261 188.5,-261 182.5,-261 176.5,-255 176.5,-249 176.5,-249 176.5,-205 176.5,-205 176.5,-199 182.5,-193 188.5,-193 188.5,-193 272.5,-193 272.5,-193 278.5,-193 284.5,-199 284.5,-205 284.5,-205 284.5,-249 284.5,-249 284.5,-255 278.5,-261 272.5,-261\"/>\n",
       "<text text-anchor=\"middle\" x=\"230.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 &lt;= 0.197</text>\n",
       "<text text-anchor=\"middle\" x=\"230.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.098</text>\n",
       "<text text-anchor=\"middle\" x=\"230.5\" y=\"-215.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 200</text>\n",
       "<text text-anchor=\"middle\" x=\"230.5\" y=\"-200.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.354</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.780392\" stroke=\"#000000\" d=\"M208,-157C208,-157 131,-157 131,-157 125,-157 119,-151 119,-145 119,-145 119,-101 119,-101 119,-95 125,-89 131,-89 131,-89 208,-89 208,-89 214,-89 220,-95 220,-101 220,-101 220,-145 220,-145 220,-151 214,-157 208,-157\"/>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 &lt;= 0.092</text>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.038</text>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 44</text>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-96.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.689</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M210.5263,-192.9465C205.4707,-184.3271 199.9753,-174.9579 194.6983,-165.9611\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"197.5969,-163.985 189.5186,-157.13 191.5589,-167.5265 197.5969,-163.985\"/>\n",
       "<text text-anchor=\"middle\" x=\"183.214\" y=\"-177.622\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">True</text>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.200000\" stroke=\"#000000\" d=\"M334.5,-157C334.5,-157 250.5,-157 250.5,-157 244.5,-157 238.5,-151 238.5,-145 238.5,-145 238.5,-101 238.5,-101 238.5,-95 244.5,-89 250.5,-89 250.5,-89 334.5,-89 334.5,-89 340.5,-89 346.5,-95 346.5,-101 346.5,-101 346.5,-145 346.5,-145 346.5,-151 340.5,-157 334.5,-157\"/>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">x1 &lt;= 0.772</text>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.074</text>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 156</text>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-96.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.259</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;4 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>0&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M250.8011,-192.9465C255.9396,-184.3271 261.5251,-174.9579 266.8886,-165.9611\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"270.0389,-167.5117 272.1533,-157.13 264.0263,-163.9272 270.0389,-167.5117\"/>\n",
       "<text text-anchor=\"middle\" x=\"278.2853\" y=\"-177.6663\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">False</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<path fill=\"#e58139\" stroke=\"#000000\" d=\"M89,-53C89,-53 12,-53 12,-53 6,-53 0,-47 0,-41 0,-41 0,-12 0,-12 0,-6 6,0 12,0 12,0 89,0 89,0 95,0 101,-6 101,-12 101,-12 101,-41 101,-41 101,-47 95,-53 89,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"50.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.018</text>\n",
       "<text text-anchor=\"middle\" x=\"50.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 20</text>\n",
       "<text text-anchor=\"middle\" x=\"50.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.854</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M127.5451,-88.9777C115.8014,-79.4545 103.0562,-69.1191 91.376,-59.6473\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"93.4568,-56.8286 83.4852,-53.2485 89.0478,-62.2656 93.4568,-56.8286\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>3</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.596078\" stroke=\"#000000\" d=\"M208,-53C208,-53 131,-53 131,-53 125,-53 119,-47 119,-41 119,-41 119,-12 119,-12 119,-6 125,0 131,0 131,0 208,0 208,0 214,0 220,-6 220,-12 220,-12 220,-41 220,-41 220,-47 214,-53 208,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.013</text>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 24</text>\n",
       "<text text-anchor=\"middle\" x=\"169.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.552</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;3 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>1&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M169.5,-88.9777C169.5,-80.7364 169.5,-71.887 169.5,-63.5153\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"173.0001,-63.2484 169.5,-53.2485 166.0001,-63.2485 173.0001,-63.2484\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>5</title>\n",
       "<path fill=\"transparent\" stroke=\"#000000\" d=\"M334.5,-53C334.5,-53 250.5,-53 250.5,-53 244.5,-53 238.5,-47 238.5,-41 238.5,-41 238.5,-12 238.5,-12 238.5,-6 244.5,0 250.5,0 250.5,0 334.5,0 334.5,0 340.5,0 346.5,-6 346.5,-12 346.5,-12 346.5,-41 346.5,-41 346.5,-47 340.5,-53 334.5,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.015</text>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 110</text>\n",
       "<text text-anchor=\"middle\" x=\"292.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.111</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M292.5,-88.9777C292.5,-80.7364 292.5,-71.887 292.5,-63.5153\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"296.0001,-63.2484 292.5,-53.2485 289.0001,-63.2485 296.0001,-63.2484\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>6</title>\n",
       "<path fill=\"#e58139\" fill-opacity=\"0.678431\" stroke=\"#000000\" d=\"M454,-53C454,-53 377,-53 377,-53 371,-53 365,-47 365,-41 365,-41 365,-12 365,-12 365,-6 371,0 377,0 377,0 454,0 454,0 460,0 466,-6 466,-12 466,-12 466,-41 466,-41 466,-47 460,-53 454,-53\"/>\n",
       "<text text-anchor=\"middle\" x=\"415.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">mse = 0.036</text>\n",
       "<text text-anchor=\"middle\" x=\"415.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">samples = 46</text>\n",
       "<text text-anchor=\"middle\" x=\"415.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\" fill=\"#000000\">value = 0.615</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"#000000\" d=\"M335.8652,-88.9777C348.0036,-79.4545 361.1772,-69.1191 373.2501,-59.6473\"/>\n",
       "<polygon fill=\"#000000\" stroke=\"#000000\" points=\"375.6989,-62.1748 381.4061,-53.2485 371.378,-56.6674 375.6989,-62.1748\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.files.Source at 0x7f9a3847a090>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Source.from_file(os.path.join(IMAGES_PATH, \"regression_tree.dot\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saving figure tree_regression_regularization_plot\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "tree_reg1 = DecisionTreeRegressor(random_state=42)\n",
    "tree_reg2 = DecisionTreeRegressor(random_state=42, min_samples_leaf=10)\n",
    "tree_reg1.fit(X, y)\n",
    "tree_reg2.fit(X, y)\n",
    "\n",
    "x1 = np.linspace(0, 1, 500).reshape(-1, 1)\n",
    "y_pred1 = tree_reg1.predict(x1)\n",
    "y_pred2 = tree_reg2.predict(x1)\n",
    "\n",
    "fig, axes = plt.subplots(ncols=2, figsize=(10, 4), sharey=True)\n",
    "\n",
    "plt.sca(axes[0])\n",
    "plt.plot(X, y, \"b.\")\n",
    "plt.plot(x1, y_pred1, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
    "plt.axis([0, 1, -0.2, 1.1])\n",
    "plt.xlabel(\"$x_1$\", fontsize=18)\n",
    "plt.ylabel(\"$y$\", fontsize=18, rotation=0)\n",
    "plt.legend(loc=\"upper center\", fontsize=18)\n",
    "plt.title(\"No restrictions\", fontsize=14)\n",
    "\n",
    "plt.sca(axes[1])\n",
    "plt.plot(X, y, \"b.\")\n",
    "plt.plot(x1, y_pred2, \"r.-\", linewidth=2, label=r\"$\\hat{y}$\")\n",
    "plt.axis([0, 1, -0.2, 1.1])\n",
    "plt.xlabel(\"$x_1$\", fontsize=18)\n",
    "plt.title(\"min_samples_leaf={}\".format(tree_reg2.min_samples_leaf), fontsize=14)\n",
    "\n",
    "save_fig(\"tree_regression_regularization_plot\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Exercise solutions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. to 6."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "See appendix A."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_Exercise: train and fine-tune a Decision Tree for the moons dataset._"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "a. Generate a moons dataset using `make_moons(n_samples=10000, noise=0.4)`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Adding `random_state=42` to make this notebook's output constant:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import make_moons\n",
    "\n",
    "X, y = make_moons(n_samples=10000, noise=0.4, random_state=42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "b. Split it into a training set and a test set using `train_test_split()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "c. Use grid search with cross-validation (with the help of the `GridSearchCV` class) to find good hyperparameter values for a `DecisionTreeClassifier`. Hint: try various values for `max_leaf_nodes`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 294 candidates, totalling 882 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n",
      "[Parallel(n_jobs=1)]: Done 882 out of 882 | elapsed:    6.8s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "       estimator=DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
       "            max_features=None, max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
       "            splitter='best'),\n",
       "       fit_params=None, iid='warn', n_jobs=None,\n",
       "       param_grid={'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99], 'min_samples_split': [2, 3, 4]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring=None, verbose=1)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "params = {'max_leaf_nodes': list(range(2, 100)), 'min_samples_split': [2, 3, 4]}\n",
    "grid_search_cv = GridSearchCV(DecisionTreeClassifier(random_state=42), params, verbose=1, cv=3)\n",
    "\n",
    "grid_search_cv.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,\n",
       "            max_features=None, max_leaf_nodes=17,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, presort=False, random_state=42,\n",
       "            splitter='best')"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_search_cv.best_estimator_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "d. Train it on the full training set using these hyperparameters, and measure your model's performance on the test set. You should get roughly 85% to 87% accuracy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By default, `GridSearchCV` trains the best model found on the whole training set (you can change this by setting `refit=False`), so we don't need to do it again. We can simply evaluate the model's accuracy:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8695"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "y_pred = grid_search_cv.predict(X_test)\n",
    "accuracy_score(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "_Exercise: Grow a forest._"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "a. Continuing the previous exercise, generate 1,000 subsets of the training set, each containing 100 instances selected randomly. Hint: you can use Scikit-Learn's `ShuffleSplit` class for this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import ShuffleSplit\n",
    "\n",
    "n_trees = 1000\n",
    "n_instances = 100\n",
    "\n",
    "mini_sets = []\n",
    "\n",
    "rs = ShuffleSplit(n_splits=n_trees, test_size=len(X_train) - n_instances, random_state=42)\n",
    "for mini_train_index, mini_test_index in rs.split(X_train):\n",
    "    X_mini_train = X_train[mini_train_index]\n",
    "    y_mini_train = y_train[mini_train_index]\n",
    "    mini_sets.append((X_mini_train, y_mini_train))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "b. Train one Decision Tree on each subset, using the best hyperparameter values found above. Evaluate these 1,000 Decision Trees on the test set. Since they were trained on smaller sets, these Decision Trees will likely perform worse than the first Decision Tree, achieving only about 80% accuracy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8054499999999999"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.base import clone\n",
    "\n",
    "forest = [clone(grid_search_cv.best_estimator_) for _ in range(n_trees)]\n",
    "\n",
    "accuracy_scores = []\n",
    "\n",
    "for tree, (X_mini_train, y_mini_train) in zip(forest, mini_sets):\n",
    "    tree.fit(X_mini_train, y_mini_train)\n",
    "    \n",
    "    y_pred = tree.predict(X_test)\n",
    "    accuracy_scores.append(accuracy_score(y_test, y_pred))\n",
    "\n",
    "np.mean(accuracy_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "c. Now comes the magic. For each test set instance, generate the predictions of the 1,000 Decision Trees, and keep only the most frequent prediction (you can use SciPy's `mode()` function for this). This gives you _majority-vote predictions_ over the test set."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "Y_pred = np.empty([n_trees, len(X_test)], dtype=np.uint8)\n",
    "\n",
    "for tree_index, tree in enumerate(forest):\n",
    "    Y_pred[tree_index] = tree.predict(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy.stats import mode\n",
    "\n",
    "y_pred_majority_votes, n_votes = mode(Y_pred, axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "d. Evaluate these predictions on the test set: you should obtain a slightly higher accuracy than your first model (about 0.5 to 1.5% higher). Congratulations, you have trained a Random Forest classifier!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.872"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(y_test, y_pred_majority_votes.reshape([-1]))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "nav_menu": {
   "height": "309px",
   "width": "468px"
  },
  "toc": {
   "navigate_menu": true,
   "number_sections": true,
   "sideBar": true,
   "threshold": 6,
   "toc_cell": false,
   "toc_section_display": "block",
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
